<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>java基础面试题四 | 小狐档案库</title>
    <meta name="generator" content="VuePress 1.8.2">
    <link rel="icon" href="/favicon.ico">
    <meta name="description" content="学习资料">
    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
    
    <link rel="preload" href="/assets/css/0.styles.0c36f186.css" as="style"><link rel="preload" href="/assets/js/app.7029ddab.js" as="script"><link rel="preload" href="/assets/js/3.ebaa3085.js" as="script"><link rel="preload" href="/assets/js/1.8ce67e8c.js" as="script"><link rel="preload" href="/assets/js/55.4bb99598.js" as="script"><link rel="prefetch" href="/assets/js/10.15c1f9c8.js"><link rel="prefetch" href="/assets/js/11.dc2fbddf.js"><link rel="prefetch" href="/assets/js/12.26ab1f36.js"><link rel="prefetch" href="/assets/js/13.6e1d4dbc.js"><link rel="prefetch" href="/assets/js/14.0cd48e80.js"><link rel="prefetch" href="/assets/js/15.74a9f029.js"><link rel="prefetch" href="/assets/js/16.24ef3382.js"><link rel="prefetch" href="/assets/js/17.c8a9bd0f.js"><link rel="prefetch" href="/assets/js/18.fbd494c2.js"><link rel="prefetch" href="/assets/js/19.f9a0df71.js"><link rel="prefetch" href="/assets/js/20.e6d0df38.js"><link rel="prefetch" href="/assets/js/21.932645cc.js"><link rel="prefetch" href="/assets/js/22.d6027dce.js"><link rel="prefetch" href="/assets/js/23.53bce141.js"><link rel="prefetch" href="/assets/js/24.ed3b8b64.js"><link rel="prefetch" href="/assets/js/25.ed88877e.js"><link rel="prefetch" href="/assets/js/26.f5ad24d5.js"><link rel="prefetch" href="/assets/js/27.64ad45b4.js"><link rel="prefetch" href="/assets/js/28.f308f8ab.js"><link rel="prefetch" href="/assets/js/29.4d95742d.js"><link rel="prefetch" href="/assets/js/30.0a867de0.js"><link rel="prefetch" href="/assets/js/31.f12def86.js"><link rel="prefetch" href="/assets/js/32.6b4fd8b7.js"><link rel="prefetch" href="/assets/js/33.4bb2aa9c.js"><link rel="prefetch" href="/assets/js/34.013e731c.js"><link rel="prefetch" href="/assets/js/35.6b263ef8.js"><link rel="prefetch" href="/assets/js/36.06acf3cc.js"><link rel="prefetch" href="/assets/js/37.fe72c29c.js"><link rel="prefetch" href="/assets/js/38.9b4e0bd6.js"><link rel="prefetch" href="/assets/js/39.0cde0408.js"><link rel="prefetch" href="/assets/js/4.9b5650bb.js"><link rel="prefetch" href="/assets/js/40.56bda9a8.js"><link rel="prefetch" href="/assets/js/41.007ae34c.js"><link rel="prefetch" href="/assets/js/42.bdaf414b.js"><link rel="prefetch" href="/assets/js/43.78d32d4e.js"><link rel="prefetch" href="/assets/js/44.a10cf8a5.js"><link rel="prefetch" href="/assets/js/45.19e14721.js"><link rel="prefetch" href="/assets/js/46.57ebcf06.js"><link rel="prefetch" href="/assets/js/47.9a513ffe.js"><link rel="prefetch" href="/assets/js/48.245b165a.js"><link rel="prefetch" href="/assets/js/49.fab43655.js"><link rel="prefetch" href="/assets/js/5.a16ef7f8.js"><link rel="prefetch" href="/assets/js/50.48c191fd.js"><link rel="prefetch" href="/assets/js/51.28a94b0e.js"><link rel="prefetch" href="/assets/js/52.e783fbf9.js"><link rel="prefetch" href="/assets/js/53.2f0e960e.js"><link rel="prefetch" href="/assets/js/54.577ff54e.js"><link rel="prefetch" href="/assets/js/56.e820e954.js"><link rel="prefetch" href="/assets/js/57.0cea0cfa.js"><link rel="prefetch" href="/assets/js/58.e31cfcd0.js"><link rel="prefetch" href="/assets/js/59.458ab168.js"><link rel="prefetch" href="/assets/js/6.7da424ba.js"><link rel="prefetch" href="/assets/js/60.e9caace2.js"><link rel="prefetch" href="/assets/js/61.0b61afdb.js"><link rel="prefetch" href="/assets/js/62.c240acab.js"><link rel="prefetch" href="/assets/js/63.71cd2a97.js"><link rel="prefetch" href="/assets/js/64.977ea29b.js"><link rel="prefetch" href="/assets/js/65.79b2d62a.js"><link rel="prefetch" href="/assets/js/66.8da69071.js"><link rel="prefetch" href="/assets/js/67.fdc57d7e.js"><link rel="prefetch" href="/assets/js/68.d43eabe9.js"><link rel="prefetch" href="/assets/js/7.6e92edd1.js"><link rel="prefetch" href="/assets/js/8.2389170b.js"><link rel="prefetch" href="/assets/js/9.77841f24.js">
    <link rel="stylesheet" href="/assets/css/0.styles.0c36f186.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container" data-v-1156296a><div data-v-1156296a><div id="loader-wrapper" class="loading-wrapper" data-v-d48f4d20 data-v-1156296a data-v-1156296a><div class="loader-main" data-v-d48f4d20><div data-v-d48f4d20></div><div data-v-d48f4d20></div><div data-v-d48f4d20></div><div data-v-d48f4d20></div></div> <!----> <!----></div> <div class="password-shadow password-wrapper-out" style="display:none;" data-v-4e82dffc data-v-1156296a data-v-1156296a><h3 class="title" data-v-4e82dffc data-v-4e82dffc>小狐档案库</h3> <p class="description" data-v-4e82dffc data-v-4e82dffc>学习资料</p> <label id="box" class="inputBox" data-v-4e82dffc data-v-4e82dffc><input type="password" value="" data-v-4e82dffc> <span data-v-4e82dffc>Konck! Knock!</span> <button data-v-4e82dffc>OK</button></label> <div class="footer" data-v-4e82dffc data-v-4e82dffc><span data-v-4e82dffc><i class="iconfont reco-theme" data-v-4e82dffc></i> <a target="blank" href="https://vuepress-theme-reco.recoluan.com" data-v-4e82dffc>vuePress-theme-reco</a></span> <span data-v-4e82dffc><i class="iconfont reco-copyright" data-v-4e82dffc></i> <a data-v-4e82dffc><span data-v-4e82dffc>小狐</span>
            
          <span data-v-4e82dffc>2021-9-1 - </span>
          2021
        </a></span></div></div> <div class="hide" data-v-1156296a><header class="navbar" data-v-1156296a><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/logo.png" alt="小狐档案库" class="logo"> <span class="site-name">小狐档案库</span></a> <div class="links"><div class="color-picker"><a class="color-button"><i class="iconfont reco-color"></i></a> <div class="color-picker-menu" style="display:none;"><div class="mode-options"><h4 class="title">Choose mode</h4> <ul class="color-mode-options"><li class="dark">dark</li><li class="auto active">auto</li><li class="light">light</li></ul></div></div></div> <div class="search-box"><i class="iconfont reco-search"></i> <input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link"><i class="iconfont reco-home"></i>
  首页
</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="iconfont reco-category"></i>
      分类
    </span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/GO/" class="nav-link"><i class="undefined"></i>
  GO
</a></li><li class="dropdown-item"><!----> <a href="/categories/面试系列/" class="nav-link"><i class="undefined"></i>
  面试系列
</a></li></ul></div></div><div class="nav-item"><a href="/tag/" class="nav-link"><i class="iconfont reco-tag"></i>
  Tag
</a></div><div class="nav-item"><a href="/timeline/" class="nav-link"><i class="iconfont reco-date"></i>
  足迹
</a></div><div class="nav-item"><a href="https://www.xiaohu.team" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="iconfont reco-message"></i>
  摇光图库
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <!----></nav></div></header> <div class="sidebar-mask" data-v-1156296a></div> <aside class="sidebar" data-v-1156296a><div class="personal-info-wrapper" data-v-828910c6 data-v-1156296a><img src="/avatar.jpg" alt="author-avatar" class="personal-img" data-v-828910c6> <h3 class="name" data-v-828910c6>
    小狐
  </h3> <div class="num" data-v-828910c6><div data-v-828910c6><h3 data-v-828910c6>58</h3> <h6 data-v-828910c6>Articles</h6></div> <div data-v-828910c6><h3 data-v-828910c6>20</h3> <h6 data-v-828910c6>Tags</h6></div></div> <ul class="social-links" data-v-828910c6></ul> <hr data-v-828910c6></div> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link"><i class="iconfont reco-home"></i>
  首页
</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="iconfont reco-category"></i>
      分类
    </span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/GO/" class="nav-link"><i class="undefined"></i>
  GO
</a></li><li class="dropdown-item"><!----> <a href="/categories/面试系列/" class="nav-link"><i class="undefined"></i>
  面试系列
</a></li></ul></div></div><div class="nav-item"><a href="/tag/" class="nav-link"><i class="iconfont reco-tag"></i>
  Tag
</a></div><div class="nav-item"><a href="/timeline/" class="nav-link"><i class="iconfont reco-date"></i>
  足迹
</a></div><div class="nav-item"><a href="https://www.xiaohu.team" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="iconfont reco-message"></i>
  摇光图库
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <!----></nav> <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>面试系列</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group collapsable is-sub-group depth-1"><p class="sidebar-heading open"><span>java</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group collapsable is-sub-group depth-2"><p class="sidebar-heading open"><span>java基础系列</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/blogs/audition/java/java_base/base_1.html" class="sidebar-link">java基础面试题一</a></li><li><a href="/blogs/audition/java/java_base/base_2.html" class="sidebar-link">java基础面试题二</a></li><li><a href="/blogs/audition/java/java_base/base_3.html" class="sidebar-link">java基础面试题三</a></li><li><a href="/blogs/audition/java/java_base/base_4.html" class="sidebar-link">java基础面试题四</a></li><li><a href="/blogs/audition/java/java_base/base_5.html" aria-current="page" class="active sidebar-link">java基础面试题四</a></li><li><a href="/blogs/audition/java/java_base/base_6.html" class="sidebar-link">java基础面试题六</a></li><li><a href="/blogs/audition/java/java_base/base_7.html" class="sidebar-link">java基础面试题七</a></li><li><a href="/blogs/audition/java/java_base/base_8.html" class="sidebar-link">java基础面试题八</a></li></ul></section></li><li><section class="sidebar-group collapsable is-sub-group depth-2"><p class="sidebar-heading"><span>并发编程系列</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-2"><p class="sidebar-heading"><span>Spring系列</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-2"><p class="sidebar-heading"><span>SpringBoot系列</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-2"><p class="sidebar-heading"><span>Mybatis系列</span> <span class="arrow right"></span></p> <!----></section></li></ul></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><p class="sidebar-heading"><span>redis系列</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><p class="sidebar-heading"><span>消息队列系列</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><p class="sidebar-heading"><span>zookeeper系列</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><p class="sidebar-heading"><span>Linux系列</span> <span class="arrow right"></span></p> <!----></section></li></ul></section></li></ul> </aside> <div class="password-shadow password-wrapper-in" style="display:none;" data-v-4e82dffc data-v-1156296a><h3 class="title" data-v-4e82dffc data-v-4e82dffc>java基础面试题四</h3> <!----> <label id="box" class="inputBox" data-v-4e82dffc data-v-4e82dffc><input type="password" value="" data-v-4e82dffc> <span data-v-4e82dffc>Konck! Knock!</span> <button data-v-4e82dffc>OK</button></label> <div class="footer" data-v-4e82dffc data-v-4e82dffc><span data-v-4e82dffc><i class="iconfont reco-theme" data-v-4e82dffc></i> <a target="blank" href="https://vuepress-theme-reco.recoluan.com" data-v-4e82dffc>vuePress-theme-reco</a></span> <span data-v-4e82dffc><i class="iconfont reco-copyright" data-v-4e82dffc></i> <a data-v-4e82dffc><span data-v-4e82dffc>小狐</span>
            
          <span data-v-4e82dffc>2021-9-1 - </span>
          2021
        </a></span></div></div> <div data-v-1156296a><main class="page"><section><div class="page-title"><h1 class="title">java基础面试题四</h1> <div data-v-1ff7123e><i class="iconfont reco-account" data-v-1ff7123e><span data-v-1ff7123e>小狐</span></i> <i class="iconfont reco-date" data-v-1ff7123e><span data-v-1ff7123e>9/11/2021</span></i> <!----> <i class="tags iconfont reco-tag" data-v-1ff7123e><span class="tag-item" data-v-1ff7123e>java</span><span class="tag-item" data-v-1ff7123e>Java基础</span></i></div></div> <div class="theme-reco-content content__default"><h2 id="_21、存在两个类-b-继承-a-c-继承-b-我们能将-b-转换为c-么-如-c-c-b"><a href="#_21、存在两个类-b-继承-a-c-继承-b-我们能将-b-转换为c-么-如-c-c-b" class="header-anchor">#</a> 21、存在两个类，B 继承 A，C 继承 B，我们能将 B 转换为C 么？如 C = (C) B；</h2> <p>这属于强制类型转换，如果被转换的B实例不是C类型，会有异常</p> <p>比如你的ABC分别对应动物，猫，黑猫。</p> <p>向上转型就是比如</p> <p>C c = new C();</p> <p>B b = c;</p> <p>你把c转型为B，黑猫是猫吗？是啊，所以这是ok的。</p> <p>但是反过来</p> <p>B b = new B();</p> <p>C c = (C)b;</p> <p>这就不ok了，只知道这个b是一只猫，他不一定是黑猫。</p> <p>但如果这个b已经确定是一只黑猫了，那就可以转型了</p> <p>B b = new C();</p> <p>C c = (C)b;</p> <p>这里的b本来就是黑猫啊。</p> <h2 id="_22、哪个类包含-clone-方法-是-cloneable-还是-object"><a href="#_22、哪个类包含-clone-方法-是-cloneable-还是-object" class="header-anchor">#</a> 22、哪个类包含 clone 方法？是 Cloneable 还是 Object？</h2> <p>java.lang.Cloneable 是一个标示性接口，不包含任何方法，clone 方法在object 类中定义。并且需要知道 clone() 方法是一个本地方法，这意味着它是由c 或 c++ 或 其他本地语言实现的。</p> <h2 id="_23、java-中-操作符是线程安全的吗"><a href="#_23、java-中-操作符是线程安全的吗" class="header-anchor">#</a> 23、Java 中 ++ 操作符是线程安全的吗？</h2> <p>不是线程安全的操作。它涉及到多个指令，如读取变量值，增加，然后存储回内存，这个过程可能会出现多个线程交差。</p> <h2 id="_24、a-a-b-与-a-b-的区别"><a href="#_24、a-a-b-与-a-b-的区别" class="header-anchor">#</a> 24、a = a + b 与 a += b 的区别</h2> <p>+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加，如 byte、short 或者 int，首先会将它们提升到 int 类型，然后在执行加法操作。如果加法操作的结果比 a 的最大值要大，则 a+b 会出现编译错误，但是</p> <div class="language- line-numbers-mode"><pre class="language-text"><code>byte a = 127;
byte b = 127;
b = a + b;
// error : cannot convert from int to byte
b += a;
// ok复制代码
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>（译者注：这个地方应该表述的有误，其实无论 a+b 的值为多少，编译器都会报错，因为 a+b 操作会将 a、b 提升为 int 类型，所以将 int 类型赋值给 byte就会编译出错）</p> <h2 id="_25、我能在不进行强制转换的情况下将一个-double-值赋值给long-类型的变量吗"><a href="#_25、我能在不进行强制转换的情况下将一个-double-值赋值给long-类型的变量吗" class="header-anchor">#</a> 25、我能在不进行强制转换的情况下将一个 double 值赋值给long 类型的变量吗？</h2> <p>不行，你不能在没有强制类型转换的前提下将一个 double 值赋值给 long 类型的变量，因为 double 类型的范围比 long 类型更广，所以必须要进行强制转换。</p> <h2 id="_26、3-0-1-0-3-将会返回什么-true-还是-false"><a href="#_26、3-0-1-0-3-将会返回什么-true-还是-false" class="header-anchor">#</a> 26、3*0.1 == 0.3 将会返回什么？true 还是 false？</h2> <p>false，因为有些浮点数不能完全精确的表示出来。</p> <h2 id="_27、int-和-integer-哪个会占用更多的内存"><a href="#_27、int-和-integer-哪个会占用更多的内存" class="header-anchor">#</a> 27、int 和 Integer 哪个会占用更多的内存？</h2> <p>Integer 对象会占用更多的内存。Integer 是一个对象，需要存储对象的元数据。但是 int 是一个原始类型的数据，所以占用的空间更少。</p> <h2 id="_28、为什么-java-中的-string-是不可变的-immutable"><a href="#_28、为什么-java-中的-string-是不可变的-immutable" class="header-anchor">#</a> 28、为什么 Java 中的 String 是不可变的（Immutable）？</h2> <p>Java 中的 String 不可变是因为 Java 的设计者认为字符串使用非常频繁，将字符串设置为不可变可以允许多个客户端之间共享相同的字符串。</p> <h2 id="_29、我们能在-switch-中使用-string-吗"><a href="#_29、我们能在-switch-中使用-string-吗" class="header-anchor">#</a> 29、我们能在 Switch 中使用 String 吗？</h2> <p>从 Java 7 开始，我们可以在 switch case 中使用字符串，但这仅仅是一个语法糖。内部实现在 switch 中使用字符串的 hash code。</p> <h2 id="_30、java-中的构造器链是什么"><a href="#_30、java-中的构造器链是什么" class="header-anchor">#</a> 30、Java 中的构造器链是什么？</h2> <p>当你从一个构造器中调用另一个构造器，就是 Java 中的构造器链。这种情况只在重载了类的构造器的时候才会出现。</p> <h2 id="_31、64-位-jvm-中-int-的长度是多数"><a href="#_31、64-位-jvm-中-int-的长度是多数" class="header-anchor">#</a> 31、64 位 JVM 中，int 的长度是多数？</h2> <p>Java 中，int 类型变量的长度是一个固定值，与平台无关，都是 32 位。意思就是说，在32位和64位的java虚拟机中，int 类型的长度是相同的。</p> <h2 id="_32、serial-与-parallel-gc-之间的不同之处"><a href="#_32、serial-与-parallel-gc-之间的不同之处" class="header-anchor">#</a> 32、Serial 与 Parallel GC 之间的不同之处？</h2> <p>Serial 与 Parallel 在 GC 执行的时候都会引起 stop-the-world。它们之间主要不同 serial 收集器是默认的复制收集器，执行 GC 的时候只有一个线程，而parallel 收集器使用多个 GC 线程来执行。</p> <h2 id="_33、32-位和-64-位的-jvm-int-类型变量的长度是多数"><a href="#_33、32-位和-64-位的-jvm-int-类型变量的长度是多数" class="header-anchor">#</a> 33、32 位和 64 位的 JVM，int 类型变量的长度是多数？</h2> <p>32 位和 64 位的 JVM 中，int 类型变量的长度是相同的，都是 32 位或者 4个字节。</p> <h2 id="_34、java-中-weakreference-与-softreference-的区别"><a href="#_34、java-中-weakreference-与-softreference-的区别" class="header-anchor">#</a> 34、Java 中 WeakReference 与 SoftReference 的区别？</h2> <p>虽然 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率，但是 WeakReference ，一旦失去最后一个强引用，就会被 GC 回收，而软引用虽然不能阻止被回收，但是可以延迟到 JVM 内存不足的时候。</p> <h2 id="_35、weakhashmap-是怎么工作的"><a href="#_35、weakhashmap-是怎么工作的" class="header-anchor">#</a> 35、WeakHashMap 是怎么工作的？</h2> <p>WeakHashMap 的工作与正常的 HashMap 类似，但是使用弱引用作为 key，意思就是当 key 对象没有任何引用时，key/value 将会被回收。</p> <h2 id="_36、jvm-选项-xx-usecompressedoops-有什么作用-为什么要使用"><a href="#_36、jvm-选项-xx-usecompressedoops-有什么作用-为什么要使用" class="header-anchor">#</a> 36、JVM 选项 -XX:+UseCompressedOops 有什么作用？为什么要使用？</h2> <p>当你将你的应用从 32 位的 JVM 迁移到 64 位的 JVM 时，由于对象的指针从32 位增加到了 64 位，因此堆内存会突然增加，差不多要翻倍。这也会对 CPU缓存（容量比内存小很多）的数据产生不利的影响。因为，迁移到 64 位的 JVM主要动机在于可以指定最大堆大小，通过压缩 OOP 可以节省一定的内存。通过-XX:+UseCompressedOops 选项，JVM 会使用 32 位的 OOP，而不是 64 位的 OOP。</p> <h2 id="_37、怎样通过-java-程序来判断-jvm-是-32-位-还是-64位"><a href="#_37、怎样通过-java-程序来判断-jvm-是-32-位-还是-64位" class="header-anchor">#</a> 37、怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位？</h2> <p>你可以检查某些系统属性如 sun.arch.data.model 或 os.arch 来获取该信息。</p> <h2 id="_38、32-位-jvm-和-64-位-jvm-的最大堆内存分别是多数"><a href="#_38、32-位-jvm-和-64-位-jvm-的最大堆内存分别是多数" class="header-anchor">#</a> 38、32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数？</h2> <p>理论上说上 32 位的 JVM 堆内存可以到达 2^32，即 4GB，但实际上会比这个小很多。不同操作系统之间不同，如 Windows 系统大约 1.5 GB，Solaris 大约3GB。64 位 JVM 允许指定最大的堆内存，理论上可以达到 2^64，这是一个非常大的数字，实际上你可以指定堆内存大小到 100GB。甚至有的 JVM，如 Azul，堆内存到 1000G 都是可能的。</p> <h2 id="_39、jre、jdk、jvm-及-jit-之间有什么不同"><a href="#_39、jre、jdk、jvm-及-jit-之间有什么不同" class="header-anchor">#</a> 39、JRE、JDK、JVM 及 JIT 之间有什么不同？</h2> <p>JRE 代表 Java 运行 时（Java run-time），是 运 行 Java 引用所必须的。JDK 代表 Java 开发工具（Java development kit），是 Java 程序的开发工具，如 Java编译器，它也包含 JRE。JVM 代表 Java 虚拟机（Java virtual machine），它的责任是运行 Java 应用。JIT 代表即时编译（Just In Time compilation），当代码执行的次数超过一定的阈值时，会将 Java 字节码转换为本地代码，如，主要的热点代码会被准换为本地代码，这样有利大幅度提高 Java 应用的性能。</p> <h2 id="_40、解释-java-堆空间及-gc"><a href="#_40、解释-java-堆空间及-gc" class="header-anchor">#</a> 40、解释 Java 堆空间及 GC？</h2> <p>当通过 Java 命令启动 Java 进程的时候，会为它分配内存。内存的一部分用于创建堆空间，当程序中创建对象的时候，就从对空间中分配内存。GC 是 JVM 内部的一个进程，回收无效对象的内存用于将来的分配。</p> <h2 id="_41、你能保证-gc-执行吗"><a href="#_41、你能保证-gc-执行吗" class="header-anchor">#</a> 41、你能保证 GC 执行吗？</h2> <p>不能，虽然你可以调用 System.gc() 或者 Runtime.gc()，但是没有办法保证 GC的执行。</p> <h2 id="_42、怎么获取-java-程序使用的内存-堆使用的百分比"><a href="#_42、怎么获取-java-程序使用的内存-堆使用的百分比" class="header-anchor">#</a> 42、怎么获取 Java 程序使用的内存？堆使用的百分比？</h2> <p>可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存，总内存及最大堆内存。通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间。Runtime.freeMemory() 方法返回剩余空间的字节数，Runtime.totalMemory()方法总内存的字节数，Runtime.maxMemory() 返回最大内存的字节数。</p> <h2 id="_43、java-中堆和栈有什么区别"><a href="#_43、java-中堆和栈有什么区别" class="header-anchor">#</a> 43、Java 中堆和栈有什么区别？</h2> <p>JVM 中堆和栈属于不同的内存区域，使用目的也不同。栈常用于保存方法帧和局部变量，而对象总是在堆上分配。栈通常都比堆小，也不会在多个线程之间共享，而堆被整个 JVM 的所有线程共享。</p> <h2 id="_44、-a-b-和-a-equals-b-有什么区别"><a href="#_44、-a-b-和-a-equals-b-有什么区别" class="header-anchor">#</a> 44、“a==b”和”a.equals(b)”有什么区别？</h2> <p>如果 a 和 b 都是对象，则 a==b 是比较两个对象的引用，只有当 a 和 b 指向的是堆中的同一个对象才会返回 true，而 a.equals(b) 是进行逻辑比较，所以通常需要重写该方法来提供逻辑一致性的比较。例如，String 类重写 equals() 方法，所以可以用于两个不同对象，但是包含的字母相同的比较。</p> <h2 id="_45、a-hashcode-有什么用-与-a-equals-b-有什么关系"><a href="#_45、a-hashcode-有什么用-与-a-equals-b-有什么关系" class="header-anchor">#</a> 45、a.hashCode() 有什么用？与 a.equals(b) 有什么关系？</h2> <p>hashCode() 方法是相应对象整型的 hash 值。它常用于基于 hash 的集合类，如 Hashtable、HashMap、LinkedHashMap 等等。它与 equals() 方法关系特别紧密。根据 Java 规范，两个使用 equal() 方法来判断相等的对象，必须具有相同的 hash code。</p> <h2 id="_46、final、finalize-和-finally-的不同之处"><a href="#_46、final、finalize-和-finally-的不同之处" class="header-anchor">#</a> 46、final、finalize 和 finally 的不同之处？</h2> <p>final 是一个修饰符，可以修饰变量、方法和类。如果 final 修饰变量，意味着该变量的值在初始化后不能被改变。finalize 方法是在对象被回收之前调用的方法，给对象自己最后一个复活的机会，但是什么时候调用 finalize 没有保证。finally是一个关键字，与 try 和 catch 一起用于异常的处理。finally 块一定会被执行，无论在 try 块中是否有发生异常。</p> <h2 id="_47、java-中的编译期常量是什么-使用它又什么风险"><a href="#_47、java-中的编译期常量是什么-使用它又什么风险" class="header-anchor">#</a> 47、Java 中的编译期常量是什么？使用它又什么风险？</h2> <p>公共静态不可变（public static final ）变量也就是我们所说的编译期常量，这里的 public 可选的。实际上这些变量在编译时会被替换掉，因为编译器知道这些变量的值，并且知道这些变量在运行时不能改变。这种方式存在的一个问题是你使用了一个内部的或第三方库中的公有编译时常量，但是这个值后面被其他人改变了，但是你的客户端仍然在使用老的值，甚至你已经部署了一个新的 jar。为了避免这种情况，当你在更新依赖 JAR 文件时，确保重新编译你的程序。</p> <h2 id="_48、list、set、map-和-queue-之间的区别-答案"><a href="#_48、list、set、map-和-queue-之间的区别-答案" class="header-anchor">#</a> 48、List、Set、Map 和 Queue 之间的区别(答案)</h2> <p>List 是一个有序集合，允许元素重复。它的某些实现可以提供基于下标值的常量访问时间，但是这不是 List 接口保证的。Set 是一个无序集合。</p> <h2 id="_49、poll-方法和-remove-方法的区别"><a href="#_49、poll-方法和-remove-方法的区别" class="header-anchor">#</a> 49、poll() 方法和 remove() 方法的区别？</h2> <p>poll() 和 remove() 都是从队列中取出一个元素，但是 poll() 在获取元素失败的时候会返回空，但是 remove() 失败的时候会抛出异常。</p> <h2 id="_50、java-中-linkedhashmap-和-priorityqueue-的区别是什么"><a href="#_50、java-中-linkedhashmap-和-priorityqueue-的区别是什么" class="header-anchor">#</a> 50、Java 中 LinkedHashMap 和 PriorityQueue 的区别是什么？</h2> <p>PriorityQueue 保证最高或者最低优先级的的元素总是在队列头部，但是LinkedHashMap 维持的顺序是元素插入的顺序。当遍历一个 PriorityQueue时，没有任何顺序保证，但是 LinkedHashMap 课保证遍历顺序是元素插入的顺序。</p></div></section> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">2021-9-2: </span> <span class="time">9/3/2021, 6:20:18 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev"><a href="/blogs/audition/java/java_base/base_4.html" class="prev">
            java基础面试题四
          </a></span> <span class="next"><a href="/blogs/audition/java/java_base/base_6.html">
            java基础面试题六
          </a></span></p></div> <div class="comments-wrapper"><!----></div> <ul class="side-bar sub-sidebar-wrapper" style="width:12rem;" data-v-70334359><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_21、存在两个类-b-继承-a-c-继承-b-我们能将-b-转换为c-么-如-c-c-b" class="sidebar-link reco-side-_21、存在两个类-b-继承-a-c-继承-b-我们能将-b-转换为c-么-如-c-c-b" data-v-70334359>21、存在两个类，B 继承 A，C 继承 B，我们能将 B 转换为C 么？如 C = (C) B；</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_22、哪个类包含-clone-方法-是-cloneable-还是-object" class="sidebar-link reco-side-_22、哪个类包含-clone-方法-是-cloneable-还是-object" data-v-70334359>22、哪个类包含 clone 方法？是 Cloneable 还是 Object？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_23、java-中-操作符是线程安全的吗" class="sidebar-link reco-side-_23、java-中-操作符是线程安全的吗" data-v-70334359>23、Java 中 ++ 操作符是线程安全的吗？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_24、a-a-b-与-a-b-的区别" class="sidebar-link reco-side-_24、a-a-b-与-a-b-的区别" data-v-70334359>24、a = a + b 与 a += b 的区别</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_25、我能在不进行强制转换的情况下将一个-double-值赋值给long-类型的变量吗" class="sidebar-link reco-side-_25、我能在不进行强制转换的情况下将一个-double-值赋值给long-类型的变量吗" data-v-70334359>25、我能在不进行强制转换的情况下将一个 double 值赋值给long 类型的变量吗？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_26、3-0-1-0-3-将会返回什么-true-还是-false" class="sidebar-link reco-side-_26、3-0-1-0-3-将会返回什么-true-还是-false" data-v-70334359>26、3*0.1 == 0.3 将会返回什么？true 还是 false？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_27、int-和-integer-哪个会占用更多的内存" class="sidebar-link reco-side-_27、int-和-integer-哪个会占用更多的内存" data-v-70334359>27、int 和 Integer 哪个会占用更多的内存？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_28、为什么-java-中的-string-是不可变的-immutable" class="sidebar-link reco-side-_28、为什么-java-中的-string-是不可变的-immutable" data-v-70334359>28、为什么 Java 中的 String 是不可变的（Immutable）？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_29、我们能在-switch-中使用-string-吗" class="sidebar-link reco-side-_29、我们能在-switch-中使用-string-吗" data-v-70334359>29、我们能在 Switch 中使用 String 吗？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_30、java-中的构造器链是什么" class="sidebar-link reco-side-_30、java-中的构造器链是什么" data-v-70334359>30、Java 中的构造器链是什么？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_31、64-位-jvm-中-int-的长度是多数" class="sidebar-link reco-side-_31、64-位-jvm-中-int-的长度是多数" data-v-70334359>31、64 位 JVM 中，int 的长度是多数？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_32、serial-与-parallel-gc-之间的不同之处" class="sidebar-link reco-side-_32、serial-与-parallel-gc-之间的不同之处" data-v-70334359>32、Serial 与 Parallel GC 之间的不同之处？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_33、32-位和-64-位的-jvm-int-类型变量的长度是多数" class="sidebar-link reco-side-_33、32-位和-64-位的-jvm-int-类型变量的长度是多数" data-v-70334359>33、32 位和 64 位的 JVM，int 类型变量的长度是多数？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_34、java-中-weakreference-与-softreference-的区别" class="sidebar-link reco-side-_34、java-中-weakreference-与-softreference-的区别" data-v-70334359>34、Java 中 WeakReference 与 SoftReference 的区别？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_35、weakhashmap-是怎么工作的" class="sidebar-link reco-side-_35、weakhashmap-是怎么工作的" data-v-70334359>35、WeakHashMap 是怎么工作的？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_36、jvm-选项-xx-usecompressedoops-有什么作用-为什么要使用" class="sidebar-link reco-side-_36、jvm-选项-xx-usecompressedoops-有什么作用-为什么要使用" data-v-70334359>36、JVM 选项 -XX:+UseCompressedOops 有什么作用？为什么要使用？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_37、怎样通过-java-程序来判断-jvm-是-32-位-还是-64位" class="sidebar-link reco-side-_37、怎样通过-java-程序来判断-jvm-是-32-位-还是-64位" data-v-70334359>37、怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_38、32-位-jvm-和-64-位-jvm-的最大堆内存分别是多数" class="sidebar-link reco-side-_38、32-位-jvm-和-64-位-jvm-的最大堆内存分别是多数" data-v-70334359>38、32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_39、jre、jdk、jvm-及-jit-之间有什么不同" class="sidebar-link reco-side-_39、jre、jdk、jvm-及-jit-之间有什么不同" data-v-70334359>39、JRE、JDK、JVM 及 JIT 之间有什么不同？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_40、解释-java-堆空间及-gc" class="sidebar-link reco-side-_40、解释-java-堆空间及-gc" data-v-70334359>40、解释 Java 堆空间及 GC？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_41、你能保证-gc-执行吗" class="sidebar-link reco-side-_41、你能保证-gc-执行吗" data-v-70334359>41、你能保证 GC 执行吗？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_42、怎么获取-java-程序使用的内存-堆使用的百分比" class="sidebar-link reco-side-_42、怎么获取-java-程序使用的内存-堆使用的百分比" data-v-70334359>42、怎么获取 Java 程序使用的内存？堆使用的百分比？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_43、java-中堆和栈有什么区别" class="sidebar-link reco-side-_43、java-中堆和栈有什么区别" data-v-70334359>43、Java 中堆和栈有什么区别？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_44、-a-b-和-a-equals-b-有什么区别" class="sidebar-link reco-side-_44、-a-b-和-a-equals-b-有什么区别" data-v-70334359>44、“a==b”和”a.equals(b)”有什么区别？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_45、a-hashcode-有什么用-与-a-equals-b-有什么关系" class="sidebar-link reco-side-_45、a-hashcode-有什么用-与-a-equals-b-有什么关系" data-v-70334359>45、a.hashCode() 有什么用？与 a.equals(b) 有什么关系？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_46、final、finalize-和-finally-的不同之处" class="sidebar-link reco-side-_46、final、finalize-和-finally-的不同之处" data-v-70334359>46、final、finalize 和 finally 的不同之处？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_47、java-中的编译期常量是什么-使用它又什么风险" class="sidebar-link reco-side-_47、java-中的编译期常量是什么-使用它又什么风险" data-v-70334359>47、Java 中的编译期常量是什么？使用它又什么风险？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_48、list、set、map-和-queue-之间的区别-答案" class="sidebar-link reco-side-_48、list、set、map-和-queue-之间的区别-答案" data-v-70334359>48、List、Set、Map 和 Queue 之间的区别(答案)</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_49、poll-方法和-remove-方法的区别" class="sidebar-link reco-side-_49、poll-方法和-remove-方法的区别" data-v-70334359>49、poll() 方法和 remove() 方法的区别？</a></li><li class="level-2" data-v-70334359><a href="/blogs/audition/java/java_base/base_5.html#_50、java-中-linkedhashmap-和-priorityqueue-的区别是什么" class="sidebar-link reco-side-_50、java-中-linkedhashmap-和-priorityqueue-的区别是什么" data-v-70334359>50、Java 中 LinkedHashMap 和 PriorityQueue 的区别是什么？</a></li></ul></main> <!----></div></div></div></div><div class="global-ui"><div class="back-to-ceiling" style="right:1rem;bottom:6rem;width:2.5rem;height:2.5rem;border-radius:.25rem;line-height:2.5rem;display:none;" data-v-c6073ba8 data-v-c6073ba8><svg t="1574745035067" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5404" class="icon" data-v-c6073ba8><path d="M526.60727968 10.90185116a27.675 27.675 0 0 0-29.21455937 0c-131.36607665 82.28402758-218.69155461 228.01873535-218.69155402 394.07834331a462.20625001 462.20625001 0 0 0 5.36959153 69.94390903c1.00431239 6.55289093-0.34802892 13.13561351-3.76865779 18.80351572-32.63518765 54.11355614-51.75690182 118.55860487-51.7569018 187.94566865a371.06718723 371.06718723 0 0 0 11.50484808 91.98906777c6.53300375 25.50556257 41.68394495 28.14064038 52.69160883 4.22606766 17.37162448-37.73630017 42.14135425-72.50938081 72.80769204-103.21549295 2.18761121 3.04276886 4.15646224 6.24463696 6.40373557 9.22774369a1871.4375 1871.4375 0 0 0 140.04691725 5.34970492 1866.36093723 1866.36093723 0 0 0 140.04691723-5.34970492c2.24727335-2.98310674 4.21612437-6.18497483 6.3937923-9.2178004 30.66633723 30.70611158 55.4360664 65.4791928 72.80769147 103.21549355 11.00766384 23.91457269 46.15860503 21.27949489 52.69160879-4.22606768a371.15156223 371.15156223 0 0 0 11.514792-91.99901164c0-69.36717486-19.13165746-133.82216804-51.75690182-187.92578088-3.42062944-5.66790279-4.76302748-12.26056868-3.76865837-18.80351632a462.20625001 462.20625001 0 0 0 5.36959269-69.943909c-0.00994388-166.08943902-87.32547796-311.81420293-218.6915546-394.09823051zM605.93803103 357.87693858a93.93749974 93.93749974 0 1 1-187.89594924 6.1e-7 93.93749974 93.93749974 0 0 1 187.89594924-6.1e-7z" p-id="5405" data-v-c6073ba8></path><path d="M429.50777625 765.63860547C429.50777625 803.39355007 466.44236686 1000.39046097 512.00932183 1000.39046097c45.56695499 0 82.4922232-197.00623328 82.5015456-234.7518555 0-37.75494459-36.9345906-68.35043303-82.4922232-68.34111062-45.57627738-0.00932239-82.52019037 30.59548842-82.51086798 68.34111062z" p-id="5406" data-v-c6073ba8></path></svg></div><!----><canvas id="vuepress-canvas-cursor"></canvas></div></div>
    <script src="/assets/js/app.7029ddab.js" defer></script><script src="/assets/js/3.ebaa3085.js" defer></script><script src="/assets/js/1.8ce67e8c.js" defer></script><script src="/assets/js/55.4bb99598.js" defer></script>
  </body>
</html>
